草庐IT

Python float - str - 浮点怪异

全部标签

c++ - 我应该使用哪种浮点图像格式?

过去我将RGB图像(从物理模拟生成)保存为8位/channelPPM或PNG或JPEG。现在我想保留模拟输出的动态范围,这意味着保存浮点图像,然后将转换为8位/channel作为后处理步骤(因此我可以调整转换为8位无需再次运行冗长的模拟)。是否出现了“标准”浮点图像格式?良好的免费支持库/查看器/操作工具,最好在Debian中提供,将是一个奖励。 最佳答案 您是否查看过RadianceRGBE(.hdr)和OpenEXR(.exr)。RGBE有一些sourcecodehere.NVIDIA和ATI都在其显卡中支持EXR数据。有来自O

c++ - 使用 SSE 加速浮点 5x5 矩阵 * vector 乘法

我需要每秒运行240000次矩阵vector乘法。矩阵是5x5并且始终相同,而vector在每次迭代时都会发生变化。数据类型为float。我正在考虑使用一些SSE(或类似)指令。我担心算术运算的数量与所涉及的内存运算的数量相比太少了。您认为我可以得到一些切实的(例如>20%)改进吗?我需要英特尔编译器吗?你能指出一些引用吗? 最佳答案 Eigen用于vector、矩阵等的C++模板库...两者都有针对固定大小的小矩阵(以及动态大小的矩阵)的优化代码使用SSE优化的优化代码所以你应该试一试。

c++ - 浮点加法提升为双倍?

今天早上我有一个小小的WTF时刻。WTF可以总结为:floatx=0.2f;floaty=0.1f;floatz=x+y;assert(z==x+y);//Thisassertistriggered!(Atleastwithvisualstudio2008)原因似乎是表达式x+y被提升为double并与z中的截断版本进行比较。(如果我将z更改为double则不会触发断言)。我可以看到,出于精度原因,在将结果转换为单精度之前以double执行所有浮点运算是有意义的。我在标准中找到了以下段落(我想我已经知道了,但不是在这种情况下):4.6.1."float类型的右值可以转换为double类

c++ - 浮点优化 - 指南

我们需要通过在C/C++中实现特定算法来解决的大多数科学计算问题都需要远低于double的精度。例如,1e-6、1e-7精度涵盖了ODE求解器或数值积分的99%情况。即使在我们确实需要更高精度的极少数情况下,通常数值方法本身在我们梦想达到接近double的精度之前都会失败。示例:由于舍入误差,即使在求解标准的nostiff常微分方程时,我们也不能期望简单的Runge-Kutta方法具有1e-16的精度。在这种情况下,double要求类似于要求对错误答案有更好的近似值。然后,在大多数情况下,激进的浮点优化似乎是双赢的局面,因为它可以使您的代码更快(快得多!),并且不会影响特定问题的目标准

c++ - 浮点,相等比较是否足以防止被零除?

//valuewillalwaysbeintherangeof[0.0-maximum]floatobtainRatio(floatvalue,floatmaximum){if(maximum!=0.f){returnvalue/maximum;}else{return0.f;}}maximum的范围可以是任何值,包括负数。value的范围也可以是任何值,但仅当输入在[0.0-maximum]的范围内时,该函数才需要“有意义”。输出应始终在[0.0-1.0]范围内我有两个问题想问:这种相等比较是否足以确保函数永远不会被零除?如果最大值是退化值(极小或极大),函数是否有可能返回[0.0-

c++ - 不正确的浮点行为

当我在支持软件float仿真(禁用硬件浮点)的32位powerpc内核中运行以下C++程序时,我得到一个不正确的条件评估。有人能告诉我这里的潜在问题是什么吗?#includeintmain(){intnewmax=1;if((newmax+0.0)>256){printf("\nShouldn'tbehere\n");}else{printf("\nShouldbehere\n");}}编译:powerpc-linux-g++-msoft-float-cfloating.cxxpowerpc-linux-g++-ofloatingfloating.o目标系统中的输出:[linux:/]

c++ - 将浮点 vector 转换为 16 位 int 而不饱和

我想将浮点值转换为不饱和的16位无符号整数(改为环绕/溢出)。#include#includevoidsatur_wrap(){constfloatbigVal=99000.f;const__m128bigValVec=_mm_set1_ps(bigVal);const__m64outVec64=_mm_cvtps_pi16(bigValVec);#if0const__m128ioutVec=_mm_movpi64_epi64(outVec64);#else#if1const__m128ioutVec=_mm_packs_epi32(_mm_cvttps_epi32(bigValVec

c++ - 在单个语句中将临时字符串流转换为 c_str()

考虑以下函数:voidf(constchar*str);假设我想使用stringstream生成一个字符串并将其传递给这个函数。如果我想在一个语句中做到这一点,我可能会尝试:f((std::ostringstream()这给出了一个错误:“str()”不是“basic_ostream”的成员。好的,所以operator1)这个类型转换安全吗?f(static_cast(std::ostringstream()现在,对于operator2)为什么临时std::ostringstream()上的operator我也可以强制执行正确的运算符(operator)调用!f(static_cast

c++ - 在 C++11 中,string::c_str() 指向的数组中的字符可以改变吗?

std::string::c_str()返回一个指向数组的指针,该数组包含一个以null结尾的字符序列(即C字符串),表示字符串对象的当前值.在C++98中,要求“程序不得更改此序列中的任何字符”。这是通过返回一个constchar*来鼓励的。在C++11中,“返回的指针指向字符串对象当前用于存储符合其值的字符的内部数组”,我相信不修改其内容的要求已被删除。这是真的?这段代码在C++11中可以吗?#include#include#includeusingnamespacestd;std::vectorbuf;voidsome_func(char*s){s[0]='X';//functi

c++ - 为什么 "0f"在 C++ 中不被视为浮点文字?

为什么0f在C++中不被视为浮点字面量?#includeusingnamespacestd;intmain(){cout编译上面给了我C2509(syntaxerror:'badsuffixonnumber')使用VS2008。 最佳答案 如果此设计决策有明确说明的原因,则应在C99“基本原理”文档中(C++从C中逐字复制所有这些内容,而没有重新考虑)。但是没有。这就是关于“f”后缀的所有内容:§6.4.4.2FloatingconstantsConsistentwithexistingpractice,afloating-poin